package com.example.cybz.common.untils;

import com.example.cybz.common.exception.BusinessException;
import com.example.cybz.common.exception.ThirdPartyServiceException;
import com.example.cybz.common.result.ResultCodeEnum;

/**
 * 异常抛出工具类
 */
public class ExceptionThrower {

    // 禁止实例化
    private ExceptionThrower() {
        throw new UnsupportedOperationException("This is a utility class and cannot be instantiated");
    }

    /**
     * 抛出业务异常（不带数据）
     * @param code 错误码枚举
     * @param message 错误信息
     * @throws BusinessException 业务异常
     */
    public static void throwBusinessException(ResultCodeEnum code, String message) {
        throw new BusinessException(code, message);
    }

    /**
     * 抛出业务异常（使用枚举提示）
     * @param code 错误码枚举
     * @throws BusinessException 业务异常
     */
    public static void throwBusinessException(ResultCodeEnum code) {
        throw new BusinessException(code);
    }

    /**
     * 抛出业务异常（带数据）
     * @param code 错误码枚举
     * @param message 错误信息
     * @param data 附加数据
     * @throws BusinessException 业务异常
     */
    public static void throwBusinessException(ResultCodeEnum code, String message, Object data) {
        throw new BusinessException(code, message, data);
    }

    /**
     * 抛出第三方服务异常
     * @param serviceName 服务名称
     * @param message 错误信息
     * @throws ThirdPartyServiceException 第三方服务异常
     */
    public static void throwThirdPartyServiceException(String serviceName, String message) {
        throw new ThirdPartyServiceException(serviceName, message);
    }

    /**
     * 条件满足时抛出业务异常（不带数据）
     * @param condition 触发条件
     * @param code 错误码枚举
     * @param message 错误信息
     */
    public static void throwIf(boolean condition, ResultCodeEnum code, String message) {
        if (condition) {
            throw new BusinessException(code, message);
        }
    }

    /**
     * 条件满足时抛出业务异常（带数据）
     * @param condition 触发条件
     * @param code 错误码枚举
     * @param message 错误信息
     * @param data 附加数据
     */
    public static void throwIf(boolean condition, ResultCodeEnum code, String message, Object data) {
        if (condition) {
            throw new BusinessException(code, message, data);
        }
    }

    /**
     * 条件满足时抛出业务异常（使用枚举）
     * @param condition 触发条件
     * @param code 错误码枚举
     */
    public static void throwIf(boolean condition, ResultCodeEnum code) {
        if (condition) {
            throw new BusinessException(code);
        }
    }

    /**
     * 条件满足时抛出第三方服务异常
     * @param condition 触发条件
     * @param serviceName 服务名称
     * @param message 错误信息
     */
    public static void throwThirdPartyIf(boolean condition, String serviceName, String message) {
        if (condition) {
            throw new ThirdPartyServiceException(serviceName, message);
        }
    }
}
